Informe Final Proyecto

Introducción

Hoy en día hay muchas maneras de hacer dinero vía internet, se ha hablado de lo que son las Bitcoins, distintos servicios que se pueden prestar vía web y otros cientos de negocios que se pueden hacer vía computador/smartphone. Dentro de éstas hay una que llama especialmente la atención pues se ha hecho a lo largo de prácticamente toda la historia, solo que ahora su interfaz y funcionamiento se ha digitalizado, con esto nos referimos a las apuestas. Se puede apostar por prácticamente cualquier cosa, desde quién va a ser el próximo presidente hasta por estimaciones de cuántos granos de arena caben en una taza, pero hay un tipo especial de apuestas que aparte de ser una forma de vida para algunos, despierta las pasiones de todos los involucrados, estas son las apuestas sobre el fútbol. Hoy en día hay cientos de portales dedicados a estos y se mueven millones de dólares en torno a las apuestas del fútbol.

El fútbol es actualmente el deporte más popular en el mundo y una industria billonaria, que es capaz de paralizar a muy buena parte de la población global (finales de mundiales) con un partido, si bien en los partidos profesionales suele haber un favorito para llevarse el triunfo, este es un deporte impredecible, donde los apostadores involucrados pueden llevarse tremendas ganancias apostando a un equipo que, en el papel, no tiene mayor chance de ganarle a su adversario de turno, o bien puede irse a millonarias pérdidas apostando por un resultado que parecía seguro en la previa. Hay una competición que es especialmente propensa a este tipo de resultados poco probables, ésta es la primera división del fútbol inglés, la Premier League.

Las casas de apuesta evalúan una serie de estadísticas e historiales de los equipos y establecen márgenes de ganancia para los respectivos resultados que se puedan dar. Esto va un poco más allá actualmente y la tecnología ha permitido evolucionar la forma en que se hacen las apuestas. Hoy en día se tiene el poder para hacer que estas tasas de ganancia sean dinámicas, esto es, que cambien a lo largo de un mismo partido, así pues se puede apostar quién será el siguiente equipo que meta un gol, que jugador será el que lo haga y con qué parte del cuerpo, combinaciones de resultados, prácticamente cualquier cosa que se le pueda ocurrir a uno.

Así los resultados que sean menos probables según las casa de apuestas ofrecerán altos márgenes de ganancia y dentro de estos resultados poco probables hay uno que llama la atención y que es el que motiva el proyecto a realizar, apostar a que un equipo que vaya perdiendo al entretiempo de un partido, de vuelta el resultado y se quede con el triunfo. Este es probablemente una de las apuestas más arriesgadas de hacer, ya que durante un mismo partido, es muy palpable la tendencia de que el equipo que vaya perdiendo al entretiempo termine el partido de la misma manera. Para lograr definir si vale o no la pena apostar por un resultado de esta naturaleza, se usarán unos datasets encontrados en en la página https://datahub.io/collections/football, en ellos se recopilan datos de las últimas diez ediciones de las grandes ligas de europa, así pues, se usarán estos datos para ver qué tan factible es que un equipo logre la tan preciada remontada y le de una tremenda alegría tanto a los fanáticos, como al visionario apostador que logró ganarle a la casa de apuestas.

Descripción de los datos y exploración inicial

Las características más interesantes y relevantes del dataset son: goles equipo local a medio tiempo, goles equipo visitante a medio tiempo y resultado final. Como nuestro objetivo es medio cuales son las posibilidades de que un equipo pueda dar vuelta un partido, los atributos principales para nuestro análisis son los 3 anteriormente mencionados.

No obstante, si esos son los más importantes, hay que tener en cuenta los otro parámetros, ya que se podrían encontrar correlaciones entre ellos. Por ejemplo un factor muy importante podría ser el árbitro que dirige el partido, ya que puede suceder que dependiendo de quien sea haya o no posibilidades de poder repuntar un partido. O por ejemplo un factor crucial podría ser el número de tarjetas rojas, esto es importantísimo, ya que tener menos jugadores en la cancha baja muchas las posibilidades de poder ganar un partido. Para esto es importante cargar los datos y ver todos los atributos que estos tienen.

Ahora al cargar el dataset:

data1 <- read.csv("C:/Users/thoma/Desktop/Mineria/season-0910.csv")
data2 <- read.csv("C:/Users/thoma/Desktop/Mineria/season-1011.csv")
data3 <- read.csv("C:/Users/thoma/Desktop/Mineria/season-1112.csv")
data4 <- read.csv("C:/Users/thoma/Desktop/Mineria/season-1213.csv")
data5 <- read.csv("C:/Users/thoma/Desktop/Mineria/season-1314.csv")
data6 <- read.csv("C:/Users/thoma/Desktop/Mineria/season-1415.csv")
data7 <- read.csv("C:/Users/thoma/Desktop/Mineria/season-1516.csv")
data8 <- read.csv("C:/Users/thoma/Desktop/Mineria/season1617.csv")
data9 <- read.csv("C:/Users/thoma/Desktop/Mineria/season1718.csv")
data10 <- read.csv("C:/Users/thoma/Desktop/Mineria/season-1819.csv")
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
data10 <- select(data10, -Div)
A<-rbind(data1, data2)
B<-rbind(A,data3)
C<-rbind(B,data4)
D<-rbind(C,data5)
E<-rbind(D,data6)
G<-rbind(E,data7)
H<-rbind(G,data8)
I<-rbind(H,data9)
data_total<-rbind(I,data10)

En “data_total” todos los datos se ecuentran en un mismo dataset, incluyendo todos los años y temporadas que se evalúan. Primero se debe ver el tamaño del data:

nrow(data_total)
## [1] 3800
ncol(data_total)
## [1] 25

Con esto sabemos los parámetros del dataset a usar. Para explorar los datos, se usaran los dataset de cada temporada y los totales. Primero se verá, con “str”, las definiciones de los atributos de los datos que hay en el data_total.

str(data_total)
## 'data.frame':    3800 obs. of  25 variables:
##  $ Date    : Factor w/ 1026 levels "2009-08-15","2009-08-16",..: 1 1 1 1 1 1 1 1 2 2 ...
##  $ HomeTeam: Factor w/ 36 levels "Arsenal","Aston Villa",..: 2 4 5 7 8 14 15 20 13 17 ...
##  $ AwayTeam: Factor w/ 36 levels "Arsenal","Aston Villa",..: 19 12 16 10 1 9 6 18 3 11 ...
##  $ FTHG    : int  0 0 0 2 1 0 2 0 1 2 ...
##  $ FTAG    : int  2 2 1 1 6 1 0 2 0 1 ...
##  $ FTR     : Factor w/ 3 levels "A","D","H": 1 1 1 3 1 1 3 1 3 3 ...
##  $ HTHG    : int  0 0 0 1 0 0 2 0 1 1 ...
##  $ HTAG    : int  1 1 1 1 3 1 0 1 0 0 ...
##  $ HTR     : Factor w/ 3 levels "A","D","H": 1 1 1 2 1 1 3 1 3 3 ...
##  $ Referee : Factor w/ 33 levels "A Marriner","A Taylor",..: 10 11 1 3 12 9 18 4 7 15 ...
##  $ HS      : int  11 17 11 26 8 16 12 19 26 17 ...
##  $ AS      : int  14 8 20 7 15 9 9 16 6 6 ...
##  $ HST     : int  5 9 3 12 5 4 5 11 17 11 ...
##  $ AST     : int  7 5 13 3 9 3 5 13 4 3 ...
##  $ HF      : int  15 12 16 13 11 11 15 9 13 14 ...
##  $ AF      : int  14 9 10 15 13 18 10 5 7 16 ...
##  $ HC      : int  4 5 4 12 4 6 3 8 13 6 ...
##  $ AC      : int  6 4 7 4 9 4 6 6 2 5 ...
##  $ HY      : int  2 2 2 1 0 3 2 0 1 3 ...
##  $ AY      : int  2 1 1 2 0 2 2 0 1 3 ...
##  $ HR      : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ AR      : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ HV      : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ AV      : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ V       : int  0 0 0 0 0 0 0 0 0 0 ...

Estos muestra que los atributos son los siguientes:

-Fecha del partido (Date)

-Equipo Local (HomeTeam)

-Equipo visitante (AwayTeam)

-Goles equipo local en tiempo completo (FTHG)

-Goles equipo visitante tiempo completo (FTAG)

-Resultado final (FTR)

-Goles equipo local en medio tiempo (HTHG)

-Goles equipo visitante en medio tiempo (HTAG)

-Resultado de medio tiempo (HTR)

-Arbitro (Referee)

-Tiros equipo local (HS)

-Tiros equipo visitante (AS)

-Tiros al arco equipo local (HST)

-Tiro al arco equipo visitante (AST)

-Fouls cometidos por equipo local (HF)

-Fouls cometidos por equipo visitante (AF)

-Tiros de esquina equipo local (HC)

-Tiros de esquina equipo visitante (AC)

-Tarjetas amarillas equipo local (HY)

-Tarjetas amarillas equipo visitante (AY)

-Tarjetas rojas equipo local (HR)

-Tarjetas rojas equipo visitante (AR)

Es importante notar que se le agregaron dos atributos al dataset original. Estos son los tres últimos que corresponden a:

-HV: muestra un 1 si el equipo local iba perdiendo al medio tiempo y logra ganar el partido, y un 0 en el caso contrario

-AV:muestra un 1 si el equipo visitante iba perdiendo al medio tiempo y logra ganar el partido, y un 0 en el caso contrario

-V: muestra un 1 si “se dio vuelta” el partido.

Primero, algo importante de notar es la tendencia a “dar vuelta los partidos” en el transcurso de las temporadas. Para esto se utilizan los datasets de cada temporada por separado, sumando la cantidad de veces en que se invierte el resultado del partido (V).

temporadas<-c("2009-2010", "2010-2011","2011-2012","2012-2013", "2013-2014","2014-2015","2015-2016","2016-2017","2017-2018","2018-2019")
Vueltas<-c(sum(data1$V[which(data1$V==1)]),sum(data2$V[which(data2$V==1)]),sum(data3$V[which(data3$V==1)]),sum(data4$V[which(data4$V==1)]),sum(data5$V[which(data5$V==1)]),sum(data6$V[which(data6$V==1)]),sum(data7$V[which(data7$V==1)]),sum(data8$V[which(data8$V==1)]),sum(data9$V[which(data9$V==1)]),sum(data10$V[which(data10$V==1)]))
print(Vueltas)
##  [1] 17 16 10 21 14 11 17 12 18 17
barplot(Vueltas, names.arg = temporadas)

Esto muestra que no hay una clara tendencia a “dar vuelta” los partidos por temporada, por lo que el año en que se realiza el partido no debería ser un factor de gran peso al minuto de analizar los datos.

Otro factor que puede afectar es si el equipo que cambia el resultado del partido es si este se ecuentra jugando como local o como visitante.

equipos<-c("Local", "Visitante")
HVAV<-c(sum(data_total$HV), sum(data_total$AV))
barplot(HVAV, names.arg = equipos)

Se puede notar, que existe una tendencia de los equipos que están jugando de local (en su propia cancha) a logren “dar vuelta” el partido.

Claramente, algo importante a considerar es el equipo que está jugando (como local o visita) y su contrincante al momento de ver si este tiene probabilidades de cambiar el resultado a su favor. Para esto se puede ver la cantidad de veces que cada equipo logra dar vuelta un partido como local o como visita. Primero se deben tener los nombres de todos los equipos que han participado en la Premier Leage durante las temporadas analizadas (verificando que hay la misma cantidad de equipos que jugan como local y como visitante, asegurándose que no queden equipos fuera al extraerlos del atributo HomeTeam).

unique(data_total$HomeTeam)
##  [1] Aston Villa    Blackburn      Bolton         Chelsea       
##  [5] Everton        Portsmouth     Stoke          Wolves        
##  [9] Man United     Tottenham      Sunderland     Wigan         
## [13] Birmingham     Burnley        Hull           Liverpool     
## [17] Arsenal        Man City       Fulham         West Ham      
## [21] West Brom      Newcastle      Blackpool      QPR           
## [25] Swansea        Norwich        Reading        Southampton   
## [29] Crystal Palace Cardiff        Leicester      Bournemouth   
## [33] Watford        Middlesbrough  Brighton       Huddersfield  
## 36 Levels: Arsenal Aston Villa Birmingham Blackburn Bolton ... Huddersfield
unique(data_total$AwayTeam)
##  [1] Wigan          Man City       Sunderland     Hull          
##  [5] Arsenal        Fulham         Burnley        West Ham      
##  [9] Birmingham     Liverpool      Chelsea        Wolves        
## [13] Portsmouth     Man United     Tottenham      Stoke         
## [17] Bolton         Blackburn      Everton        Aston Villa   
## [21] West Brom      Blackpool      Newcastle      Norwich       
## [25] Swansea        QPR            Southampton    Reading       
## [29] Cardiff        Crystal Palace Leicester      Watford       
## [33] Bournemouth    Middlesbrough  Huddersfield   Brighton      
## 36 Levels: Arsenal Aston Villa Birmingham Blackburn Bolton ... Huddersfield

Ahora que se tienen los nombres de cada uno de los equipos que han participado se puede hacer un dataset para cada uno. Esto sirve para ver como se comportan los equipos como locales o como visitantes, y si estos logran dar vuelta el resultado.

NomE<-c("Man United","Bournemouth","Fulham","Huddersfield","Newcastle","Watford","Wolves", "Arsenal","Liverpool","Southampton","Cardiff","Chelsea","Everton","Leicester","Tottenham", "West Ham","Brighton","Burnley","Man City","Crystal Palace","West Brom" ,"Stoke","Swansea","Hull","Middlesbrough","Sunderland","Norwich","Aston Villa" ,"QPR","Reading","Wigan","Blackburn","Bolton","Birmingham","Blackpool","Portsmouth")
vueltasLocal<-c()
vueltasVisitante<-c()
for (nombre in NomE) {
  vueltasLocal<-c(vueltasLocal,sum(data_total$HV[which(data_total$HomeTeam== nombre)]))
  vueltasVisitante<-c(vueltasVisitante,sum(data_total$AV[which(data_total$AwayTeam== nombre)]))
}
par(mfcol=c(1,2))
barplot(vueltasLocal, main="Equipo está de local", 
  names.arg = NomE)
barplot(vueltasVisitante, main="Equipo está de visitante", 
  names.arg = NomE)

Se puede notar que todos los equipos han logrado “dar vuelta” un partido como local entre 0 y 10 veces en las 10 temporadas analizadas. En cambio, cuando están de visita el rango es entre 0 y 7. Aún así, se puede ver claramente que el equipo que está jugando es importante para la predicción del partido (si logra cambiar el resultado). Nuevamente, se logra notar que si el equipo está jugando como local o como visitante.

Otro factor que puede afectar el resultado final del partido es la cantidad de tiros al arco de los equipos que juegan el partido, tanto el visitante como el local. Para ver si la influencia de este valor es significativa se hacen gráficos para todos los partidos que se “dieron vuelta” a favor de los locales, mostrando la cantidad de tiros al arco del equipo visitante y los del equipo local

tirosArcoL1<-data_total$HST[which(data_total$HV==1)]
tirosArcoV1<-data_total$AST[which(data_total$HV==1)]
tirosArcoL2<-data_total$HST[which(data_total$AV==1)]
tirosArcoV2<-data_total$AST[which(data_total$AV==1)]
par(mfcol=c(1,2))
plot(density(tirosArcoL1))
plot(density(tirosArcoV1))

Con esto se puede ver que el promedio de tiros al arco de los equipos participantes en un partido, donde el equipo local logra “dar vuelta” el partido, es parecido a 5. Sin embargo, se logra apreciar que hay una mayor cantidad de partidos donde el equipo local genera más tiros al arco (se nota en la forma de la curva), es decir, el ancho de banda es mayor.

par(mfcol=c(1,2))
plot(density(tirosArcoL2))
plot(density(tirosArcoV2))

Por otra parte, cuando el equipo visitante es quien logra revertir el partido, las curvas de densidad de tiros al arco por el local y por el equipo visita no son muy distintas entre sí. Más aún, se aprecia que el equipo local y el equipo visitante tienen anchos de banda muy similares. A pesar de esto falta comparar con el caso de que no se da vuelta el partido.

tirosArcoL3<-data_total$HST[which(data_total$V==0)]
tirosArcoV3<-data_total$AST[which(data_total$V==0)]
par(mfcol=c(1,2))
plot(density(tirosArcoL3))
plot(density(tirosArcoV3))

Nuevamente se obtiene que el promedio de tiros al arco en ambos equipos participantes es 5. pero se debe notar que los anchos de banda son mucho menos a los obtenidos anteriormente. De todo lo anterior se puede extraer que el promedio de tiros al arco se mantiene relativamente constante en los tres casos (cuando el equipo local revierte el resultado, cuando el equipo visitante revierte el partido y cuando no ocurre ninguna de estas dos situaciones). Sin embargo, se puede apreciar que se produce una mayor cantidad de outliers de tiros al arco (HST y AST) cuando el resultado del partido se invierte. Es por esto que se podría llegar a considerar que la cantida de tiros al arco afectan si el partido se “da vuelta” o no.

Un factor que puede influir en que el resultado del partido se invierta es la cantidad de targetas rojas y tarjetas amarillas que tiene cada equipo. Para ver si este valor afecta se debe evaluar el caso en que se “da vuelta” el partido a favor del local, a favor del visitante o cuando el partido no invierte su resultado.

rojasL1<-data_total$HR[which(data_total$HV==1)]
rojasV1<-data_total$AR[which(data_total$HV==1)]
amarillasL1<-data_total$HY[which(data_total$HV==1)]
amarillasV1<-data_total$AY[which(data_total$HV==1)]
par(mfcol=c(2,2))
plot(density(rojasL1))
plot(density(rojasV1))
plot(density(amarillasL1))
plot(density(amarillasV1))

Se puede notar que cuando el equipo local logra invertir el resultado, ambos equipos tienen un promedio muy cercano a cero de tarjetas rojas, pero el equipo visitante tiene mayor cantidad de casos en que se alejan del promedio (el ancho de banda es mayor). Por otra parte, se ve que el equipo visitante tiende a tener una mayor cantidad de tarjetas amarillas que el local, esto se extrae de que el promedio se ve desplazado en el caso del equipo visitante.

rojasL2<-data_total$HR[which(data_total$AV==1)]
rojasV2<-data_total$AR[which(data_total$AV==1)]
amarillasL2<-data_total$HY[which(data_total$AV==1)]
amarillasV2<-data_total$AY[which(data_total$AV==1)]
par(mfcol=c(2,2))
plot(density(rojasL2))
plot(density(rojasV2))
plot(density(amarillasL2))
plot(density(amarillasV2))

En el caso en que el equipo visitante de vuelta el partidose puede ver que nuevamente el promedio de tarjetas rojas para ambos equipos es cero, pero al contrario que el caso anterior hay más outliers para el equipo local. Además, el equipo visitante nuevamente tiene una mayor cantidad de tarjetas amarillas que el equipo local.

rojasL3<-data_total$HR[which(data_total$V==0)]
rojasV3<-data_total$AR[which(data_total$V==0)]
amarillasL3<-data_total$HY[which(data_total$V==0)]
amarillasV3<-data_total$AY[which(data_total$V==0)]
par(mfcol=c(2,2))
plot(density(rojasL3))
plot(density(rojasV3))
plot(density(amarillasL3))
plot(density(amarillasV3))

Cuando el partido no invierte su resultado, la cantidad de tarjetas rojas para ambos equipos es prácticamente igual, la diferencia del ancho de banda es muy pequeño. Además al comparar con los anchos de bandas de las tarjetas rojas de los casos anteriores se logra capturar que el ancho de banda es mucho menor, por lo que hay menos casos de outliers. Por otra parte, las tarjetas amarillas son parecidas para ambos equipos, pero los equipos visitantes tienen casos de outliers más lejanos del promedio que los equipos locales y que las tarjetas amarillas de los casos anteriores. En conclusión, se puede decir que se nota una tendencia en las tarjetas amarillas y las tarjetas rojas de los partidos y si el resultado de este mismo se invierte o no (y con esto, a favor de quien se invierte). Si bien, los promedios son parecidos para los 3 casos, la lejanía de los outliers (y la cantidad) logran mostrar un cambio para cada caso.

Finalmente, el último factor que se revisa en el presente informe es el arbitro del partido. Para esto se necesita conocer todos los arbitros que dirigen los partidos de la Premier Leage.

unique(data_total$Referee)
##  [1] M Clattenburg M Dean        A Marriner    A Wiley       M Halsey     
##  [6] M Atkinson    S Bennett     C Foy         L Mason       P Dowd       
## [11] M Jones       L Probert     P Walton      H Webb        S Attwell    
## [16] K Friend      St Bennett    Mn Atkinson   A Taylor      M Oliver     
## [21] N Swarbrick   J Moss        R East        C Pawson      R Madley     
## [26] P Tierney     K Stroud      G Scott       S Hooper      C Kavanagh   
## [31] l Mason       D Coote       A Madley     
## 33 Levels: A Marriner A Taylor A Wiley C Foy H Webb K Friend ... A Madley

Con estos se puede ver la cantidad de partidos que logró “dar vuelta” el equipo local y el equipo visintante en el arbitraje de cada uno de ellos, para así concluir que hay o no hay una tendencia.

arbitros<- c("A Marriner","K Friend","M Dean","C Kavanagh","M Atkinson","J Moss","C Pawson","M Oliver","A Taylor","G Scott","L Mason","S Attwell","P Tierney","L Probert","D Coote","R East","S Hooper","A Madley","J Linington","N Swarbrick","M Jones","R Madley","M Clattenburg" ,"l Mason","K Stroud","C Foy","P Dowd","H Webb","M Halsey","P Walton","A Wiley","S Bennett" ,"St Bennett","Mn Atkinson")
arbL<-c()
arbV<-c()
arb<-c()
for (a in arbitros) {
  arbL<-c(arbL, sum(data_total$HV[which(data_total$Referee==a)]))
  arbV<-c(arbV, sum(data_total$AV[which(data_total$Referee==a)]))
  arb<-c(arb, sum(data_total$V[which(data_total$Referee==a)]))
}
par(mfcol=c(2,2))
barplot(arbL,main = "Local lo invierte", names.arg = arbitros)
barplot(arbV,main = "Visitante lo invierte", names.arg = arbitros)
barplot(arb,main = "Partido se invierte", names.arg = arbitros )

Se puede notar que hay diferencias según el árbitro que dirige el partido. Para ciertos arbitros hay más casos en que el partido se da vuelta, inclusive se puede notar que algunos tienden a obtener una mayor tasa a favor del visitante y otros a favor del local. De esto se extrae que el arbitro es un factor de importancia en el resultado del partido y si este cambia entre el primer y el segundo tiempo.

Problematica central

La principal problemática del objetivo del presente reporte es identificar los atributos del dataset que afectan de forma significtiva el resultado del partido, sabiendo el resultado de la primera mitad de éste. Se espera que la probabilidad de que un equipo que va perdiendo o ganando durante el primer tiempo, se capaz de anotar suficientes goles (o evitar que el otro equipo le saque una ventaja en goles) para ganar la fecha se pueda estimar. De forma preliminar, un método de estimación podría ser categorizar el par partido y equipo, a partir de los atributos entregados en el dataset, en 4 grupos. El primer grupo puede ser “Ganador-Ganador”, en donde el equipo contrario al analizado va perdiendo en el primer tiempo y tiene baja probabilidad de finalmente ganar. Otra categoría podría ser “Perdedor-Ganador”, en donde inicialmente el equipo en estudio está en desventaja de goles, pero en el segundo tiempo tiene alta probabilidad de ganar en el segundo tiempo, y así, ganar la fecha. El tercer grupo puede ser “Perdedor-Perdedor” en donde el grupo en estudio tiene una baja probabilidad de anotar goles en el segundo tiempo que los lleven a la victoria del partido. Finalmente, el último grupo podría ser “Ganador-Perdedor”, en donde el equipo contrario va perdiendo en la primera mitad, pero tiene alta probabilidad de finalmente ser el campeón del encuentro.

Clustering

\ Para poder realizar un clustering se deben tener datos numéricos, ya que se requiere métricas de distancia. \ ### Pre-procesamiento de datos \ Para esto se crea la siguiente función que asigna un valor a cada árbitro, el cual va a depender de la cantidad de tarjetas rojas y tarjetas amarillas que puso en los partidos que dirige.

AMarriner<-data_total[data_total$Referee=="A Marriner", ]
a<-(sum(AMarriner$HR)+sum(AMarriner$HY)+sum(AMarriner$AR)+sum(AMarriner$AY))/nrow(AMarriner)

KFriend<-data_total[data_total$Referee=="K Friend", ]
b<-(sum(KFriend$HR)+sum(KFriend$HY)+sum(KFriend$AR)+sum(KFriend$AY))/nrow(KFriend)

MDean<-data_total[data_total$Referee=="M Dean", ]
c<-(sum(MDean$HR)+sum(MDean$HY)+sum(MDean$AR)+sum(MDean$AY))/nrow(MDean)

CKavanagh<-data_total[data_total$Referee=="C Kavanagh", ]
d<-(sum(CKavanagh$HR)+sum(CKavanagh$HY)+sum(CKavanagh$AR)+sum(CKavanagh$AY))/nrow(CKavanagh)

MAtkinson<-data_total[data_total$Referee=="M Atkinson", ]
e<-(sum(MAtkinson$HR)+sum(MAtkinson$HY)+sum(MAtkinson$AR)+sum(MAtkinson$AY))/nrow(MAtkinson)

JMoss<-data_total[data_total$Referee=="J Moss", ]
f<-(sum(JMoss$HR)+sum(JMoss$HY)+sum(JMoss$AR)+sum(JMoss$AY))/nrow(JMoss)

CPawson<-data_total[data_total$Referee=="C Pawson", ]
g<-(sum(CPawson$HR)+sum(CPawson$HY)+sum(CPawson$AR)+sum(CPawson$AY))/nrow(CPawson)

MOliver<-data_total[data_total$Referee=="M Oliver", ]
h<-(sum(MOliver$HR)+sum(MOliver$HY)+sum(MOliver$AR)+sum(MOliver$AY))/nrow(MOliver)

ATaylor<-data_total[data_total$Referee=="A Taylor", ]
i<-(sum(ATaylor$HR)+sum(ATaylor$HY)+sum(ATaylor$AR)+sum(ATaylor$AY))/nrow(ATaylor)

GScott<-data_total[data_total$Referee=="G Scott", ]
j<-(sum(GScott$HR)+sum(GScott$HY)+sum(GScott$AR)+sum(GScott$AY))/nrow(GScott)

LMason<-data_total[data_total$Referee=="L Mason", ]
k<-(sum(LMason$HR)+sum(LMason$HY)+sum(LMason$AR)+sum(LMason$AY))/nrow(LMason)

SAttwell<-data_total[data_total$Referee=="S Attwell", ]
l<-(sum(SAttwell$HR)+sum(SAttwell$HY)+sum(SAttwell$AR)+sum(SAttwell$AY))/nrow(SAttwell)

PTierney<-data_total[data_total$Referee=="P Tierney", ]
m<-(sum(PTierney$HR)+sum(PTierney$HY)+sum(PTierney$AR)+sum(PTierney$AY))/nrow(PTierney)

LProbert<-data_total[data_total$Referee=="L Probert", ]
n<-(sum(LProbert$HR)+sum(LProbert$HY)+sum(LProbert$AR)+sum(LProbert$AY))/nrow(LProbert)

DCoote<-data_total[data_total$Referee=="D Coote", ]
o<-(sum(DCoote$HR)+sum(DCoote$HY)+sum(DCoote$AR)+sum(DCoote$AY))/nrow(DCoote)

REast<-data_total[data_total$Referee=="R East", ]
p<-(sum(REast$HR)+sum(REast$HY)+sum(REast$AR)+sum(REast$AY))/nrow(REast)

SHooper<-data_total[data_total$Referee=="S Hooper", ]
q<-(sum(SHooper$HR)+sum(SHooper$HY)+sum(SHooper$AR)+sum(SHooper$AY))/nrow(SHooper)

AMadley<-data_total[data_total$Referee=="A Madley", ]
r<-(sum(AMadley$HR)+sum(AMadley$HY)+sum(AMadley$AR)+sum(AMadley$AY))/nrow(AMadley)

JLinington<-data_total[data_total$Referee=="J Linington", ]
s<-(sum(JLinington$HR)+sum(JLinington$HY)+sum(JLinington$AR)+sum(JLinington$AY))/nrow(JLinington)

NSwarbrick<-data_total[data_total$Referee=="N Swarbrick", ]
t<-(sum(NSwarbrick$HR)+sum(NSwarbrick$HY)+sum(NSwarbrick$AR)+sum(NSwarbrick$AY))/nrow(NSwarbrick)

MJones<-data_total[data_total$Referee=="M Jones", ]
u<-(sum(MJones$HR)+sum(MJones$HY)+sum(MJones$AR)+sum(MJones$AY))/nrow(MJones)

RMadley<-data_total[data_total$Referee=="R Madley", ]
x<-(sum(RMadley$HR)+sum(RMadley$HY)+sum(RMadley$AR)+sum(RMadley$AY))/nrow(RMadley)

MClattenburg<-data_total[data_total$Referee=="M Clattenburg", ]
y<-(sum(MClattenburg$HR)+sum(MClattenburg$HY)+sum(MClattenburg$AR)+sum(MClattenburg$AY))/nrow(MClattenburg)

lMason<-data_total[data_total$Referee=="l Mason", ]
z<-(sum(lMason$HR)+sum(lMason$HY)+sum(lMason$AR)+sum(lMason$AY))/nrow(lMason)

KStroud<-data_total[data_total$Referee=="K Stroud", ]
aa<-(sum(KStroud$HR)+sum(KStroud$HY)+sum(KStroud$AR)+sum(KStroud$AY))/nrow(KStroud)

CFoy<-data_total[data_total$Referee=="C Foy", ]
bb<-(sum(CFoy$HR)+sum(CFoy$HY)+sum(CFoy$AR)+sum(CFoy$AY))/nrow(CFoy)

PDowd<-data_total[data_total$Referee=="P Dowd", ]
cc<-(sum(PDowd$HR)+sum(PDowd$HY)+sum(PDowd$AR)+sum(PDowd$AY))/nrow(PDowd)

HWebb<-data_total[data_total$Referee=="H Webb", ]
dd<-(sum(HWebb$HR)+sum(HWebb$HY)+sum(HWebb$AR)+sum(HWebb$AY))/nrow(HWebb)

MHalsey<-data_total[data_total$Referee=="M Halsey", ]
ee<-(sum(MHalsey$HR)+sum(MHalsey$HY)+sum(MHalsey$AR)+sum(MHalsey$AY))/nrow(MHalsey)

PWalton<-data_total[data_total$Referee=="P Walton", ]
ff<-(sum(PWalton$HR)+sum(PWalton$HY)+sum(PWalton$AR)+sum(PWalton$AY))/nrow(PWalton)

AWiley<-data_total[data_total$Referee=="A Wiley", ]
gg<-(sum(AWiley$HR)+sum(AWiley$HY)+sum(AWiley$AR)+sum(AWiley$AY))/nrow(AWiley)

SBennett<-data_total[data_total$Referee=="S Bennett", ]
hh<-(sum(SBennett$HR)+sum(SBennett$HY)+sum(SBennett$AR)+sum(SBennett$AY))/nrow(SBennett)

StBennett<-data_total[data_total$Referee=="St Bennett", ]
ii<-(sum(StBennett$HR)+sum(StBennett$HY)+sum(StBennett$AR)+sum(StBennett$AY))/nrow(StBennett)

MnAtkinson<-data_total[data_total$Referee=="Mn Atkinson", ]
jj<-(sum(MnAtkinson$HR)+sum(MnAtkinson$HY)+sum(MnAtkinson$AR)+sum(MnAtkinson$AY))/nrow(MnAtkinson)

#Ahora asignamos los valores a el dataset
data_total$Referee <- as.character(data_total$Referee)
data_total$Referee[data_total$Referee == "A Marriner"] <- a
data_total$Referee[data_total$Referee == "K Friend"] <- b
data_total$Referee[data_total$Referee == "M Dean"] <- c
data_total$Referee[data_total$Referee == "C Kavanagh"] <- d
data_total$Referee[data_total$Referee == "M Atkinson"] <- e
data_total$Referee[data_total$Referee == "J Moss"] <- f
data_total$Referee[data_total$Referee == "C Pawson"] <- g
data_total$Referee[data_total$Referee == "M Oliver"] <- h
data_total$Referee[data_total$Referee == "A Taylor"] <- i
data_total$Referee[data_total$Referee == "G Scott"] <- j
data_total$Referee[data_total$Referee == "L Mason"] <- k
data_total$Referee[data_total$Referee == "S Attwell"] <- l
data_total$Referee[data_total$Referee == "P Tierney"] <- m
data_total$Referee[data_total$Referee == "L Probert"] <- n
data_total$Referee[data_total$Referee == "D Coote"] <- o
data_total$Referee[data_total$Referee == "R East"] <- p
data_total$Referee[data_total$Referee == "S Hooper"] <- q
data_total$Referee[data_total$Referee == "A Madley"] <- r
data_total$Referee[data_total$Referee == "J Linington"] <- s
data_total$Referee[data_total$Referee == "N Swarbrick"] <- t
data_total$Referee[data_total$Referee == "M Jones"] <- u
data_total$Referee[data_total$Referee == "R Madley"] <- x
data_total$Referee[data_total$Referee == "M Clattenburg"] <- y
data_total$Referee[data_total$Referee == "l Mason"] <- z
data_total$Referee[data_total$Referee == "K Stroud"] <- aa
data_total$Referee[data_total$Referee == "C Foy"] <- bb
data_total$Referee[data_total$Referee == "P Dowd"] <- cc
data_total$Referee[data_total$Referee == "H Webb"] <- dd
data_total$Referee[data_total$Referee == "M Halsey"] <- ee
data_total$Referee[data_total$Referee == "P Walton"] <- ff
data_total$Referee[data_total$Referee == "A Wiley"] <- gg
data_total$Referee[data_total$Referee == "S Bennett"] <- hh
data_total$Referee[data_total$Referee == "St Bennett"] <- ii
data_total$Referee[data_total$Referee == "Mn Atkinson"] <- jj
data_total$Referee<-as.factor(data_total$Referee)

\ Ahora para los equipos se asignan sus posiciones actuales en la tabla (ranking).

data_total$HomeTeam <- as.character(data_total$HomeTeam)
data_total$HomeTeam[data_total$HomeTeam=="Man City"]<-1
data_total$HomeTeam[data_total$HomeTeam=="Liverpool"]<-2
data_total$HomeTeam[data_total$HomeTeam=="Chelsea"]<-3
data_total$HomeTeam[data_total$HomeTeam=="Tottenham"]<-4
data_total$HomeTeam[data_total$HomeTeam=="Arsenal"]<-5
data_total$HomeTeam[data_total$HomeTeam=="Man United"]<-6
data_total$HomeTeam[data_total$HomeTeam=="Wolves"]<-7
data_total$HomeTeam[data_total$HomeTeam=="Everton"]<-8
data_total$HomeTeam[data_total$HomeTeam=="Leicester"]<-9
data_total$HomeTeam[data_total$HomeTeam=="West Ham"]<-10
data_total$HomeTeam[data_total$HomeTeam=="Watford"]<-11
data_total$HomeTeam[data_total$HomeTeam=="Crystal Palace"]<-12
data_total$HomeTeam[data_total$HomeTeam=="Newcastle"]<-13
data_total$HomeTeam[data_total$HomeTeam=="Bournemouth"]<-14
data_total$HomeTeam[data_total$HomeTeam=="Burnley"]<-15
data_total$HomeTeam[data_total$HomeTeam=="Southampton"]<-16
data_total$HomeTeam[data_total$HomeTeam=="Brighton"]<-17
data_total$HomeTeam[data_total$HomeTeam=="Cardiff"]<-18
data_total$HomeTeam[data_total$HomeTeam=="Fulham"]<-19
data_total$HomeTeam[data_total$HomeTeam=="Huddersfield"]<-20
data_total$HomeTeam[data_total$HomeTeam=="West Brom"]<-21
data_total$HomeTeam[data_total$HomeTeam=="Stoke"]<-22
data_total$HomeTeam[data_total$HomeTeam=="Swansea"]<-23
data_total$HomeTeam[data_total$HomeTeam=="Hull"]<-24
data_total$HomeTeam[data_total$HomeTeam=="Middlesbrough"]<-25
data_total$HomeTeam[data_total$HomeTeam=="Sunderland"]<-26
data_total$HomeTeam[data_total$HomeTeam=="Norwich"]<-27
data_total$HomeTeam[data_total$HomeTeam=="Aston Villa"]<-28
data_total$HomeTeam[data_total$HomeTeam=="QPR"]<-29
data_total$HomeTeam[data_total$HomeTeam=="Reading"]<-30
data_total$HomeTeam[data_total$HomeTeam=="Wigan"]<-31
data_total$HomeTeam[data_total$HomeTeam=="Blackburn"]<-32
data_total$HomeTeam[data_total$HomeTeam=="Bolton"]<-33
data_total$HomeTeam[data_total$HomeTeam=="Birmingham"]<-34
data_total$HomeTeam[data_total$HomeTeam=="Blackpool"]<-35
data_total$HomeTeam[data_total$HomeTeam=="Portsmouth"]<-36
data_total$HomeTeam<-as.factor(data_total$HomeTeam)

data_total$AwayTeam <- as.character(data_total$AwayTeam)
data_total$AwayTeam[data_total$AwayTeam=="Man City"]<-1
data_total$AwayTeam[data_total$AwayTeam=="Liverpool"]<-2
data_total$AwayTeam[data_total$AwayTeam=="Chelsea"]<-3
data_total$AwayTeam[data_total$AwayTeam=="Tottenham"]<-4
data_total$AwayTeam[data_total$AwayTeam=="Arsenal"]<-5
data_total$AwayTeam[data_total$AwayTeam=="Man United"]<-6
data_total$AwayTeam[data_total$AwayTeam=="Wolves"]<-7
data_total$AwayTeam[data_total$AwayTeam=="Everton"]<-8
data_total$AwayTeam[data_total$AwayTeam=="Leicester"]<-9
data_total$AwayTeam[data_total$AwayTeam=="West Ham"]<-10
data_total$AwayTeam[data_total$AwayTeam=="Watford"]<-11
data_total$AwayTeam[data_total$AwayTeam=="Crystal Palace"]<-12
data_total$AwayTeam[data_total$AwayTeam=="Newcastle"]<-13
data_total$AwayTeam[data_total$AwayTeam=="Bournemouth"]<-14
data_total$AwayTeam[data_total$AwayTeam=="Burnley"]<-15
data_total$AwayTeam[data_total$AwayTeam=="Southampton"]<-16
data_total$AwayTeam[data_total$AwayTeam=="Brighton"]<-17
data_total$AwayTeam[data_total$AwayTeam=="Cardiff"]<-18
data_total$AwayTeam[data_total$AwayTeam=="Fulham"]<-19
data_total$AwayTeam[data_total$AwayTeam=="Huddersfield"]<-20
data_total$AwayTeam[data_total$AwayTeam=="West Brom"]<-21
data_total$AwayTeam[data_total$AwayTeam=="Stoke"]<-22
data_total$AwayTeam[data_total$AwayTeam=="Swansea"]<-23
data_total$AwayTeam[data_total$AwayTeam=="Hull"]<-24
data_total$AwayTeam[data_total$AwayTeam=="Middlesbrough"]<-25
data_total$AwayTeam[data_total$AwayTeam=="Sunderland"]<-26
data_total$AwayTeam[data_total$AwayTeam=="Norwich"]<-27
data_total$AwayTeam[data_total$AwayTeam=="Aston Villa"]<-28
data_total$AwayTeam[data_total$AwayTeam=="QPR"]<-29
data_total$AwayTeam[data_total$AwayTeam=="Reading"]<-30
data_total$AwayTeam[data_total$AwayTeam=="Wigan"]<-31
data_total$AwayTeam[data_total$AwayTeam=="Blackburn"]<-32
data_total$AwayTeam[data_total$AwayTeam=="Bolton"]<-33
data_total$AwayTeam[data_total$AwayTeam=="Birmingham"]<-34
data_total$AwayTeam[data_total$AwayTeam=="Blackpool"]<-35
data_total$AwayTeam[data_total$AwayTeam=="Portsmouth"]<-36
data_total$AwayTeam<-as.factor(data_total$AwayTeam)

\ Tambien escogeremos que Home=0,Away=10 y Draw =20:

data_total$FTR <- as.character(data_total$FTR)
data_total$FTR[data_total$FTR == "H"]<- 0
data_total$FTR[data_total$FTR == "A"]<- 10
data_total$FTR[data_total$FTR == "D"]<- 20
data_total$FTR<-as.factor(data_total$FTR)

data_total$HTR <- as.character(data_total$HTR)
data_total$HTR[data_total$HTR == "H"]<- 0
data_total$HTR[data_total$HTR == "A"]<- 10
data_total$HTR[data_total$HTR == "D"]<- 20
data_total$HTR<-as.factor(data_total$HTR)

\ ### K-Means Realizaremos un clustering para todos los equipos que han dado vuelta un partido, sin importar si estaban de local o visita, despues para los que lo dieron vuelta siendo local y despues para los que lo dieron vuelta siendo visita. Tambien para comparar analizaremos el caso en que no se dio vuelta el partido. Esto dara patrones de los partidos en si, con ello se generara diferentes grupos (tarjetas amarillas, rojas, tiros al arco, etc) que sean propios de cuando un partido pueda darse vuelta o no.

total<-data_total[ ,c(-1,-23,-24,-25)]

novuelta<-data_total[data_total$V==0, ] #filtramos
novuelta<-novuelta[ ,c(-1,-23,-24,-25)] #sacamos columnas que no nos sirven

diovuelta<-data_total[data_total$V==1, ]
diovuelta<-diovuelta[ ,c(-1,-23,-24,-25)]

diovueltalocal<-data_total[data_total$HV==1, ]
diovueltalocal<-diovueltalocal[ ,c(-1,-23,-24,-25)]

diovueltavisita<-data_total[data_total$AV==1, ]
diovueltavisita<-diovueltavisita[ ,c(-1,-23,-24,-25)]

boxplot(total)

boxplot(novuelta)  #graficamos

boxplot(diovuelta)

boxplot(diovueltalocal)

boxplot(diovueltavisita)

\

Como ocuparemos K-Means, premiro veremos cual es el numero de cluster:

set.seed(2)

wss <- 0
clust = 15 # graficaremos hasta 15 clusters
for (i in 1:clust){
  wss[i] <-
    sum(kmeans(diovuelta, centers=i)$withinss)
}

plot(1:clust, wss, type="b", xlab="Numero de clusters", ylab="wss")

\

Da la impresion que no es facil elegir el numero de cluster, ya que la curva es bien suave. Pero como se quiere determinar si un equipo lo da vuelta o no, para efectos practicos elegiremos 2 clusters. Al fnal ira una conclusion de todo. \

Ahora ocupando K-Means haremos un analisis. Pero primero hay que escalar los datos (para que asi una medida no se lleve todas las metricas). Para ello lo que queremos es formar 2 cluster (se da o no vuelta) y las iteraciones iran variando, hasta encontrar el mejor resultado.

#total
km.out<-kmeans(total,2,nstart=5)
km.out$centers
##   HomeTeam AwayTeam     FTHG      FTAG       FTR      HTHG      HTAG
## 1  8.92740 18.50468 2.322014 0.7447307  2.277518 1.0866511 0.3120609
## 2 18.82266 11.00335 0.956979 1.5353728 12.394837 0.3690249 0.6940727
##         HTR  Referee       HS        AS      HST      AST       HF
## 1  6.147541 3.391218 16.55152  9.529274 7.517564 3.844848 10.35246
## 2 14.287763 3.400478 12.24618 12.617113 4.786807 5.514340 10.83604
##         AF       HC       AC       HY       AY         HR         AR
## 1 11.21838 6.810890 4.165691 1.311475 1.793326 0.03981265 0.10362998
## 2 11.06405 5.389101 5.271033 1.614723 1.753346 0.07552581 0.07361377
#novuelta2<-scale(novuelta)
km1.out <- kmeans(novuelta, 2, nstart = 5)
km1.out$centers
##   HomeTeam AwayTeam      FTHG      FTAG       FTR      HTHG      HTAG
## 1 18.42439 11.21707 0.9112195 1.5146341 12.682927 0.3409756 0.6956098
## 2  9.10958 18.55604 2.3625548 0.6831559  2.010019 1.1534126 0.2748904
##         HTR  Referee       HS        AS      HST      AST       HF
## 1 14.795122 3.399826 12.40585 12.443415 4.798049 5.437073 10.83561
## 2  5.723231 3.389203 16.53914  9.577332 7.564809 3.834064 10.33250
##         AF       HC       AC       HY       AY         HR         AR
## 1 11.10049 5.480976 5.176098 1.619024 1.750244 0.07512195 0.07317073
## 2 11.15341 6.772073 4.206637 1.275517 1.768316 0.03631810 0.10331872
#diovuelta2<-scale(diovuelta)
km2.out <- kmeans(diovuelta, 2, nstart = 5)
km2.out$centers
##    HomeTeam AwayTeam     FTHG     FTAG      FTR      HTHG      HTAG
## 1 22.289474 10.65789 1.907895 2.105263 5.921053 0.7500000 0.5657895
## 2  7.961039 15.40260 2.363636 1.662338 2.077922 0.3896104 1.0000000
##        HTR  Referee       HS        AS      HST      AST       HF       AF
## 1 4.078947 3.384558 10.80263 15.078947 5.013158 6.723684 10.75000 10.50000
## 2 7.922078 3.461982 15.88312  9.363636 7.220779 4.194805 10.64935 12.22078
##         HC       AC       HY       AY         HR         AR
## 1 4.644737 6.657895 1.539474 1.750000 0.11842105 0.06578947
## 2 6.532468 3.987013 1.883117 2.415584 0.06493506 0.14285714
#diovueltalocal2<-scale(diovueltalocal)
km3.out <- kmeans(diovueltalocal, 2, nstart = 5)
km3.out$centers
##    HomeTeam AwayTeam     FTHG     FTAG FTR      HTHG     HTAG HTR  Referee
## 1 23.615385 15.84615 2.589744 1.333333   0 0.1025641 1.179487  10 3.352570
## 2  6.320755 13.67925 2.603774 1.452830   0 0.1698113 1.226415  10 3.460458
##         HS        AS      HST      AST       HF       AF       HC       AC
## 1 13.30769 13.641026 6.333333 6.435897 10.71795 11.02564 5.358974 5.794872
## 2 16.56604  9.509434 7.433962 4.150943 10.37736 12.43396 6.754717 4.283019
##         HY       AY         HR        AR
## 1 1.589744 1.794872 0.02564103 0.1025641
## 2 1.754717 2.415094 0.01886792 0.1698113
#diovueltavisita2<-scale(diovueltavisita)
km4.out <- kmeans(diovueltavisita, 2, nstart = 5)
km4.out$centers
##   HomeTeam  AwayTeam     FTHG     FTAG FTR     HTHG       HTAG HTR
## 1 21.74194  5.290323 1.419355 2.580645  10 1.161290 0.09677419   0
## 2 12.56667 16.300000 1.466667 2.633333  10 1.266667 0.20000000   0
##    Referee        HS       AS      HST      AST       HF       AF       HC
## 1 3.439764  8.903226 16.25806 4.193548 6.806452 10.64516 10.16129 4.064516
## 2 3.433728 12.366667 10.90000 5.533333 5.066667 11.30000 11.16667 5.433333
##         AC       HY       AY        HR         AR
## 1 7.290323 1.580645 2.064516 0.1612903 0.06451613
## 2 4.466667 1.933333 1.900000 0.2333333 0.03333333

Ploteamos los pares, para ver las relaciones y cluster formados a partir de K-Means.

pairs(total,col=km.out$cluster)

pairs(novuelta,col=km1.out$cluster)

pairs(diovuelta,col=km2.out$cluster)

pairs(diovueltalocal,col=km3.out$cluster)

pairs(diovueltavisita,col=km4.out$cluster)

\

El grafico de pares es muy extenso. Reduscamos a las columnas mas importantes (los pares que queremos ver):

library(ggplot2) # instalar si es necesario
## Registered S3 methods overwritten by 'ggplot2':
##   method         from 
##   [.quosures     rlang
##   c.quosures     rlang
##   print.quosures rlang
library(GGally)
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## 
## Attaching package: 'GGally'
## The following object is masked from 'package:dplyr':
## 
##     nasa
set.seed(100)
#total
total1<-total[,c("HomeTeam","AwayTeam","Referee","HST","AST")]
k<-kmeans(total1,2,nstart=10)

total1$cluster<-factor(k$cluster)
ggpairs(total1, aes(colour = cluster),cardinality_threshold = 36)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#novuelta
novuelta1<-novuelta[,c("HomeTeam","AwayTeam","Referee","HST","AST")]
k1<-kmeans(novuelta1,2,nstart=10)

novuelta1$cluster<-factor(k1$cluster)
ggpairs(novuelta1, aes(colour = cluster),cardinality_threshold = 36)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#diovuelta
diovuelta1<-diovuelta[,c("HomeTeam","AwayTeam","Referee","HST","AST")]
k2<-kmeans(diovuelta1,2,nstart=10)

diovuelta1$cluster<-factor(k2$cluster)
ggpairs(diovuelta1, aes(colour = cluster),cardinality_threshold = 36)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#diovueltalocal
diovueltalocal1<-diovueltalocal[,c("HomeTeam","AwayTeam","Referee","HST","AST")]
k3<-kmeans(diovueltalocal1,2,nstart=10)

diovueltalocal1$cluster<-factor(k3$cluster)
ggpairs(diovueltalocal1, aes(colour = cluster),cardinality_threshold = 36)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

#diovueltavisita
diovueltavisita1<-diovueltavisita[,c("HomeTeam","AwayTeam","Referee","HST","AST")]
k4<-kmeans(diovueltavisita1,2,nstart=10)

diovueltavisita1$cluster<-factor(k4$cluster)
ggpairs(diovueltavisita1, aes(colour = cluster),cardinality_threshold = 36)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

\

Otros graficos, que nos sirven para visualizar:

library("cluster") 
#total

clusplot(total1[, c(1, 2)], k$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Home vs Away)")

clusplot(total1[, c(1, 3)], k$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Home vs Referee)")

clusplot(total1[, c(1, 4)], k$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Home vs HST)")

clusplot(total1[, c(2, 5)], k$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Away vs AST)")

#diovuelta

clusplot(diovuelta1[, c(1, 2)], k2$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Home vs Away)")

clusplot(diovuelta1[, c(1, 3)], k2$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Home vs Referee)")

clusplot(diovuelta1[, c(1, 4)], k2$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Home vs HST)")

clusplot(diovuelta1[, c(2, 5)], k2$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Away vs AST)")

#diovueltalocal

clusplot(diovueltalocal1[, c(1, 2)], k3$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Home vs Away)")

clusplot(diovueltalocal1[, c(1, 3)], k3$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Home vs Referee)")

clusplot(diovueltalocal1[, c(1, 4)], k3$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Home vs HST)")

clusplot(diovueltalocal1[, c(2, 5)], k3$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Away vs AST)")

#diovueltavisita

clusplot(diovueltavisita1[, c(1, 2)], k4$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Home vs Away)")

clusplot(diovueltavisita1[, c(1, 3)], k4$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Home vs Referee)")

clusplot(diovueltavisita1[, c(1, 4)], k4$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Home vs HST)")

clusplot(diovueltavisita1[, c(2, 5)], k4$cluster, color=TRUE, shade=TRUE, labels=2, lines=0, main="IPCAP (Away vs AST)")

Como se puede notar, no se puede sacar ninguna conclusion clara sobre los grupos formados, no hay alguna tendencia en los cluster que expresen claramente si un equipo puede o no dar vuelta un partido. Se puede notar que al tratar de elegir el número de cluster el resultado no es claro. Aún así se prosiguió imponiendo lo que se espera encontrar, es decir 2 clusters. \

Después se puede observar que en le resultado de los cluster, no hay nada muy claro que apresiar, ademas es difícil observar tendencias ya que son varios pares (funcion pair). Al confeccionar otros graficos, para poder observar de mejor manera los resultados del clustering (funcion ggplot), se llega a lo mismo, no se notan separaciones marcadas entre los dos clusters. \

Además, se puede notar que al graficar pares de atributos y los clusters, los puntos de datos están todos muy unidos, por lo que los clusters se superponen y, por lo tanto, no son muy definidos los clusters (no están separados). Esto nos lleva a la conclusión de que el clustering no es una buena forma de predecir datos futuros, ya que no hay características claras que segreguen un partido de otro, que los diferencien de manera significativa, para poder decidir si este se dará vuelta o no.

Conclusiones clustering

Como se puede notar, se puede sacar ninguna conclusion clara sobre los grupos formados, no hay alguna tendencia en los cluster que expresen claramente si un equipo puede o no dar vuelta un partido. Se puede notar que al trtar de elegir el numero de cluster el resultado no e claro. pero se prosiguio imponiendo lo que se espera encontrar. \

Despues se puede observar que en le resultado de los cluster, no hay nada muy claro que apresiar, ademas es dificil observar tendencias ya que son varios pares (funcion pair). Al confeccionar otros graficos, para poder observar de mejor manera los resultados del clustering (funcion ggplot), se llega a lo mismo. \

Ademas se puede notar que esta conclusion es corroborada por el diagrama de cajas confeccionado anteriormente, ya que en el diagrama no se puede notar algun cambio significativo entre dar vuelta o no un partido. Esto es debido a que la verdad es que los partidos de futbol son muy standars y es dificil tratar de buscar cluster si todos los partidos son muy parecidos. \ Conclusion final: Del clustering se puede concluir que no es lo más eficiente para este tipo de problema, los partidos son muy estándar y buscar clusters de de si se da vuelta un partido es difícil. Es una tareas dificl, ya que la cantidad de partidos en los que un equipo da vuelta el juego no son muchos, por lo que al hacer clustering estos grupos no son representados o no nos sirven ya que los clusters son demasiado pequeños. Es por esto que no se puede hacer ningún análisis interesante con este método.

Procesamiento de datos

Ahora lo que sigues es continuar depurando los datos para darle tributos más significativos a nuestro dataset. Esto se va a lograr de la siguiente manera, en primer lugar darle a los equipos su posición actual en la tabla y aplicar eso para entrenar todas las temporadas es un despropósito, ya que se pierde completamente el contexto que se pretende generar que es el de de una correcta cuantificación de la posición que tiene un equipo en la tabla al momento de jugar un partido, el valor del equipo y las tendencias del árbitro. Para la posición y valor del equipo se creará el atributo “poder”. Este será una ponderación del rendimiento del equipo que se calcula como la cantidad de puntos ganados dividido por la cantidad de puentos posibles hasta la fecha. Luego para los árbitros se crea un atributo que habla principalmente de la tendencia que tienen a darlo vuelta.